package com.idp.common.utils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.util.Date;

public class DateUtils {

    private static final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
    private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    // 定义输出格式
    private static final SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy/MM/dd");
    private static final SimpleDateFormat dd = new SimpleDateFormat("yyyy年MM月dd日");
    private static final SimpleDateFormat ss = new SimpleDateFormat("yyyy-MM-dd");

    public static String getCurrentDate() {
        return simpleDateFormat.format(new Date());
    }

    public static String getCurrentDateStr() {
        return sdf.format(new Date());
    }

    public static void main(String[] args) {
        String currentDateFormat = getCurrentDateFormat1("2024-09-15");
        System.out.println(currentDateFormat);
    }

    public static String getCurrentDateFormat(String date) {
        try {
            // 解析输入日期字符串为 Date 对象
            Date _date = simpleDateFormat.parse(date);
            // 格式化 Date 对象为目标格式的字符串
            String outputDate = outputFormat.format(_date);
            return outputDate;
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static String getCurrentDateFormat1(String date) {
        try {
            // 解析输入日期字符串为 Date 对象
            Date _date = ss.parse(date);
            // 格式化 Date 对象为目标格式的字符串
            String outputDate = dd.format(_date);
            return outputDate;
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static Date getCurrentDateStr(String date) {
        try {
            return simpleDateFormat.parse(date);
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 比较两个字符串表示的日期是否相等
     *
     * @param dateStr1 第一个日期字符串
     * @param dateStr2 第二个日期字符串
     * @param format   日期字符串的格式，例如 "yyyy/MM/dd" 或 "yyyy-MM-dd"
     * @return 如果两个日期相等，返回 true；否则返回 false
     */
    public static boolean areDatesEqual(String dateStr1, String dateStr2, String format) {
        try {
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
            LocalDate date1 = LocalDate.parse(dateStr1, formatter);
            LocalDate date2 = LocalDate.parse(dateStr2, formatter);
            return date1.equals(date2);
        } catch (DateTimeParseException e) {
            // 如果解析失败，返回 false
            return false;
        }
    }

    /**
     * 判断当前日期是否在指定的日期区间内
     *
     * @param startDateStr 开始日期字符串，格式为 yyyy/MM/dd
     * @param endDateStr   结束日期字符串，格式为 yyyy/MM/dd
     * @param format       日期字符串的格式，例如 "yyyy/MM/dd"
     * @return 如果当前日期在区间内，返回 true；否则返回 false
     */
    public static boolean isDateInRange(String startDateStr, String endDateStr, String format) {
        try {
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
            LocalDate startDate = LocalDate.parse(startDateStr, formatter);
            LocalDate endDate = LocalDate.parse(endDateStr, formatter);
            LocalDate currentDate = LocalDate.now();

            return !currentDate.isBefore(startDate) && !currentDate.isAfter(endDate);
        } catch (DateTimeParseException e) {
            // 如果日期解析失败，抛出异常或处理错误
            throw new IllegalArgumentException("日期格式错误：" + e.getMessage());
        }
    }

}
